package com.bookocean.application.service;

import com.bookocean.controller.dto.FavoriteDto;
import com.bookocean.controller.dto.CommentDto;
import com.bookocean.controller.dto.PageResultDto;
import com.bookocean.domain.service.InteractionDomainService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

/**
 * 互动应用服务
 * 
 * @author BookOcean
 * @since 2024-01-01
 */
@Service
@RequiredArgsConstructor
public class InteractionApplicationService {

    private final InteractionDomainService interactionDomainService;

    /**
     * 点赞
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param userId 用户ID
     */
    public void like(Long targetId, Integer targetType, Long userId) {
        interactionDomainService.like(targetId, targetType, userId);
    }

    /**
     * 取消点赞
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param userId 用户ID
     */
    public void unlike(Long targetId, Integer targetType, Long userId) {
        interactionDomainService.unlike(targetId, targetType, userId);
    }

    /**
     * 收藏
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param userId 用户ID
     */
    public void favorite(Long targetId, Integer targetType, Long userId) {
        interactionDomainService.favorite(targetId, targetType, userId);
    }

    /**
     * 取消收藏
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param userId 用户ID
     */
    public void unfavorite(Long targetId, Integer targetType, Long userId) {
        interactionDomainService.unfavorite(targetId, targetType, userId);
    }

    /**
     * 获取评论列表
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param page 页码
     * @param pageSize 每页数量
     * @return 分页评论列表
     */
    public PageResultDto<CommentDto> getComments(Long targetId, Integer targetType, Integer page, Integer pageSize) {
        return interactionDomainService.getComments(targetId, targetType, page, pageSize);
    }

    /**
     * 添加评论
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param userId 用户ID
     * @param content 评论内容
     * @param parentId 父评论ID（可选）
     */
    public void comment(Long targetId, Integer targetType, Long userId, String content, Long parentId) {
        interactionDomainService.comment(targetId, targetType, userId, content, parentId);
    }

    /**
     * 回复评论
     * 
     * @param commentId 评论ID
     * @param userId 用户ID
     * @param content 回复内容
     */
    public void replyComment(Long commentId, Long userId, String content) {
        interactionDomainService.replyComment(commentId, userId, content);
    }

    /**
     * 获取用户收藏列表
     * 
     * @param userId 用户ID
     * @param targetType 目标类型（可选）
     * @param page 页码
     * @param pageSize 每页数量
     * @return 分页收藏列表
     */
    public PageResultDto<FavoriteDto> getUserFavorites(Long userId, Integer targetType, Integer page, Integer pageSize) {
        return interactionDomainService.getUserFavorites(userId, targetType, page, pageSize);
    }
}
